// 请写出弹出值，并解释为什么。(5分)
{
  alert(a)
  a();
  var a=3;
  function a(){
    alert(10)
  } 
  alert(a)
  a=6;
  a();
  // 答：
}
// 再来加强一下吧~
{
  var x = 1,
  y = 0,
  z = 0;
  function add(x) {
    return (x = x + 1);
  }
  y = add(x);
  console.log(y)
  function add(x) {
    return (x = x + 3);
  }
  z = add(x);
  console.log(z)
  // 答：
}

// 2.请写出如下输出值，并解释为什么(8分)
{
  this.a = 20;
  function go() {
    console.log(this.a);
    this.a = 30;
  }
  go.prototype.a = 40;
  var test = {
    a: 50,
    init: function(fn) {
      fn();
      console.log(this.a);
      return fn;
    }
  };
  console.log((new go()).a);
  test.init(go);
  var p = test.init(go);
  p();
  // 答：
}
// 答完了？？继续
{
  var num = 1;
  function yideng() {
    "use strict";
    console.log(this.num++);
  }
  function yideng2() {
    console.log(++this.num);
  }
  (function() {
    "use strict";
    yideng2();
  })();
  yideng();
}

// 2-1 拓展题(请写出以下代码执行结果)：
{
  function C1(name) {
    if (name) this.name = name;
  }
  function C2(name) {
    this.name = name;
  }
  function C3(name) {
    this.name = name || 'fe';
  }
  C1.prototype.name = "yideng";
  C2.prototype.name = "lao";
  C3.prototype.name = "yuan";
  console.log((new C1().name) + (new C2().name) + (new C3().name));
}

// 3.请写出如下点击li的输出值，并用三种办法正确输出li里的数字。(12分)
{
  <ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
  </ul>
  // <script type="text/javascript">
  var list_li = document.getElementsByTagName("li");
  for (var i = 0; i < list_li.length; i++) {
    list_li[i].onclick = function() {
      console.log(i);
    }
  }
  // </script>
}

// 写出输出值，并解释为什么。(5分)
{
  function test(m) {
    m = {v:5}
  }
  var m = {k: 30};
  test(m);
  alert(m.v);
}

// 请写出代码执行结果，并解释为什么？（5分）
{
  function yideng() {
    console.log(1);
  }
  (function () {
    if (false) {
      function yideng() {
        console.log(2);
      }
    }
    yideng();
  })();
}

// 请用一句话算出0-100之间学生的学生等级，如90-100输出为1等生、80-90为2等生以此类推。不允许使用if switch等。（10分）
{

}

// 请用一句话遍历变量a。(禁止用for 已知var a = “abc”)(10分)
{}

// 请在下面写出JavaScript面向对象编程的混合式继承。并写出ES6版本的继承。
// 要求：汽车是父类，Cruze是子类。父类有颜色、价格属性，有售卖的方法。Cruze子类实现父类颜色是红色，价格是140000,售卖方法实现输出如下语句：将 红色的Cruze买给了小王价格是14万。（20分）
{}

// 请你写出如何利用EcmaScript6/7（小Demo）优化多步异步嵌套的代码？(10分)
{}

// 考考你的基础怎么样？
{
  var regex = /yideng/g;
  console.log(regex.test('yideng')); 
  console.log(regex.test('yideng')); 
  console.log(regex.test('yideng')); 
  console.log(regex.test('yideng'));
}

// 继续考考你的基础怎么样？
{
  var yideng = function yideng(){
    yideng = 1;
    console.log(typeof yideng);
  }
  yideng();
  yideng = 1;
  console.log(typeof yideng);
}

// 【仔细思考】写出如下代码执行结果，并解释为什么。(12分)
{
  var length = 10;
  function fn() {
    console.log(this.length);
  }
  var yideng = {
  length: 5,
  method: function(fn) {
    fn();
    arguments[0]();
  }
  };
  yideng.method(fn, 1);
}


// 请将如下要求写在答题纸上。
// - 1.⼿手写⼀一个new操作符
// - 2.⼿手写⼀一个JSON.stringify和JSON.parse
// - 3.⼿手写⼀一个call或 apply
// - 4.⼿手写⼀一个Function.bind
// -
// 5.⼿手写防抖(Debouncing)和节流(Throttling)
// - 6.⼿手写⼀一个JS深拷⻉贝（由浅⼊入深多种解法）
// - 7.⼿手写⼀一个instanceOf原理理
// - 8.⼿手写⼀一个map和reduce
// - 9.⼿手写实现拖拽
// -
// 10.使⽤用setTimeout模拟setInterval
// - 11.⼿手写实现Object.create的基本原理理


